// Storage封装
const Storage = 'data'
export default {
  // 储存值第一个参数是给谁传 第二个参数是传入的参数是多少  第三个参数是是否能给内部对象传递值
  setItem(key, value, obj) {
    if (obj) {
      const newObj = this.getItem(obj)
      newObj[key] = value
      this.setItem(obj, newObj)
    } else {
      // 先获取到本地中的数据
      const val = this.getStorage()
      // 给本地对象中添加数据
      val[key] = value
      // 添加完成后利用本地存储的setitem把添加后的对象传递到本地中
      sessionStorage.setItem(Storage, JSON.stringify(val))
    }
  },
  // 获取某一个对象或者获取某一个对象中的某一个值
  getItem(key, obj) {
    if (obj) {
      // 利用递归获取对象
      const newObj = this.getItem(obj)
      // 判断返回的对象是否为真 如果为真就返回该对象中的指定查询的值
      if (newObj) return newObj[key]
    }
    const val = this.getStorage()
    return val[key]
  },
  // 获取某一个存储到浏览器中的key值对的值
  getStorage() {
    return JSON.parse(sessionStorage.getItem(Storage) || '{}')
  },
  // 清除值 有两种可能 第一种删除某个值 或者删除某一个对象中的值
  clear(key, obj) {
    // 第一步获取值
    const val = this.getStorage()
    if (obj) {
      delete val[obj][key]
    } else {
      delete val[key]
    }
    // 删除完成后要把最新的值传递回去
    sessionStorage.setItem(Storage, JSON.stringify(val))
  }
}
